package cn.wangjie.spark.submit

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * Spark实现词频统计：WordCount
 */
object SparkSubmit {
	
	
	
	def main(args: Array[String]): Unit = {
		
		if(args.length < 2){
			println("Usage: SparkSubmit <input> <output> ..........................")
			System.exit(1)
		}
		
		// TODO: 1. 构建SparkContext上下为实例对象
		val sc: SparkContext = {
			// 1.a 创建SparkConf对象，设置应用属性
			val sparkConf = new SparkConf()
    			.setAppName(this.getClass.getSimpleName.stripSuffix("$"))
			//	.setMaster("local[2]")
			// 1.b 传递SparkConf对象，创建上下文实例
			SparkContext.getOrCreate(sparkConf)
		}
		
		// TODO：2. 读取数据，封装为RDD
		val inputRDD: RDD[String] = sc.textFile(args(0))
		
		// TODO: 3. 调用RDD函数，处理分析数据
		val wordsRDD: RDD[String] = inputRDD.flatMap(line => line.split("\\s+"))
		val tuplesRDD: RDD[(String, Int)] = wordsRDD.map(word => (word, 1))
		val resultRDD: RDD[(String, Int)] = tuplesRDD.reduceByKey((tmp, item) => tmp + item)
		
		// TODO: 4. 将结果RDD存储或打印
		resultRDD.saveAsTextFile(s"${args(1)}-${System.nanoTime()}")
		
		// TODO: 5. 应用运行结束，关闭资源
		sc.stop()
	}
	
}
